//package com.t2two.example.common.generator;
//
//import com.baomidou.mybatisplus.annotation.IdType;
//import com.baomidou.mybatisplus.generator.AutoGenerator;
//import com.baomidou.mybatisplus.generator.InjectionConfig;
//import com.baomidou.mybatisplus.generator.config.*;
//import com.baomidou.mybatisplus.generator.config.po.TableInfo;
//import com.baomidou.mybatisplus.generator.config.rules.DateType;
//import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
//import com.sun.javafx.PlatformUtil;
//import org.apache.commons.lang3.StringUtils;
//
//import java.time.LocalDateTime;
//import java.time.format.DateTimeFormatter;
//import java.util.ArrayList;
//import java.util.HashMap;
//import java.util.List;
//import java.util.Map;
//
//
///**
// * @description:
// * @company: 智蓝图汇
// * @date: 2021/5/28 9:15
// */
//public class CodeGenerator1 {
//
//    /**
//     * modular 名字
//     */
//    public static final String MODULAR_NAME = "";
//
//    /**
//     * 基本路径
//     */
//    public static final String SRC_MAIN_JAVA = "/src/main/java/";
//
//    /**
//     * 作者
//     */
//    public static final String AUTHOR = "李飞";
//
//    /**
//     * 是否是 rest 接口
//     */
//    private static final boolean REST_CONTROLLER_STYLE = true;
//
////    public static final String JDBC_MYSQL_URL = "jdbc:mysql://114.117.1.113:23066/projecth?" +
////            "serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8";
//
//    public static final String JDBC_DRIVER_NAME = "com.mysql.jdbc.Driver";
//
//    /**
//     * @author     : bruce lan/00001
//     * @description: 自动生成代码
//     * @date       : 2022/5/26 15:54
//     * @param mavenModuleName: 模块名
//     * @param dirName: 代码目录名
//     * @param tableName: 表名
//     * @param packageName: 包名
//     * @param mysqlUrl: mysql url地址
//     * @param username: mysql用户名
//     * @param password: mysql密码
//     * @return
//     */
//    public static void generator(String mavenModuleName, String dirName, String tableName, String packageName, String mysqlUrl, String username, String password) {
//        autoGenerator(mavenModuleName, dirName, tableName, packageName, mysqlUrl, username, password);
//    }
//    public static void autoGenerator(String mavenModuleName, String dirName, String tableName, String parentName, String mysqlUrl, String username, String password) {
//        new AutoGenerator()
//                .setGlobalConfig(getGlobalConfig(mavenModuleName))
//                .setDataSource(getDataSourceConfig(mysqlUrl, username, password))
//                .setPackageInfo(getPackageConfig(dirName, parentName))
//                .setStrategy(getStrategyConfig(tableName, ""))
//                .setCfg(getInjectionConfig(mavenModuleName,dirName, parentName))
//                .setTemplate(getTemplateConfig())
//                .execute();
//    }
//
//    private static String getDateTime() {
//        LocalDateTime localDate = LocalDateTime.now();
//        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//        return localDate.format(formatter);
//    }
//
//    private static InjectionConfig getInjectionConfig(String moduleName,String dirName,String parentName) {
//        return new InjectionConfig() {
//            @Override
//            public void initMap() {
//                Map map = new HashMap();
//                map.put("dateTime", getDateTime());
//                map.put("entityLombokModel", true);
//                setMap(map);
//                List<FileOutConfig> fileOutConfigList = new ArrayList<FileOutConfig>();
//                fileOutConfigList.add(new FileOutConfig("/templates-generator-myself/entityDto.java.vm"){
//                    @Override
//                    public String outputFile(TableInfo tableInfo) {
//                        String outputPath = getGlobalConfig1(moduleName).getOutputDir() + "/" + test(parentName) + "/" + dirName + "/dto/";
//                        return outputPath + tableInfo.getEntityName() + "Dto.java";
//                    }
//                });
//                fileOutConfigList.add(new FileOutConfig("/templates-generator-myself/entityParam.java.vm"){
//                    @Override
//                    public String outputFile(TableInfo tableInfo) {
//                        String outputPath = getGlobalConfig1(moduleName).getOutputDir() + "/" + test(parentName) + "/" + dirName + "/param/";
//                        return outputPath + tableInfo.getEntityName() + "Param.java";
//                    }
//                });
//                fileOutConfigList.add(new FileOutConfig("/templates-generator-myself/entityVo.java.vm"){
//                    @Override
//                    public String outputFile(TableInfo tableInfo) {
//                        String outputPath = getGlobalConfig1(moduleName).getOutputDir() + "/" + test(parentName) + "/" + dirName + "/vo/";
//                        return outputPath + tableInfo.getEntityName() + "Vo.java";
//                    }
//                });
//                setFileOutConfigList(fileOutConfigList);
//            }
//        };
//    }
//
//
//    public static String test(String parentName){
//        if(StringUtils.isNotBlank(parentName)){
//            return String.join("/", parentName.split("\\."));
//        }
//        return "";
//    }
//
//    private static StrategyConfig getStrategyConfig(String tableName, String tablePrefix) {
//        return new StrategyConfig()
//                .setNaming(NamingStrategy.underline_to_camel)
//                .setColumnNaming(NamingStrategy.underline_to_camel)
//                .setInclude(tableName)
//                .setRestControllerStyle(REST_CONTROLLER_STYLE)
//                .setEntityBuilderModel(true)
//                .setControllerMappingHyphenStyle(true)
//                .entityTableFieldAnnotationEnable(true)
//                .setTablePrefix(tablePrefix + "_");
//    }
//
//    private static PackageConfig getPackageConfig(String moduleName, String parentName) {
//        return new PackageConfig()
//                .setModuleName(moduleName)
//                .setParent(parentName)
//                .setService("service")
//                .setServiceImpl("service.impl")
//                .setController("controller")
//                .setEntity("entity");
//    }
//
//    private static DataSourceConfig getDataSourceConfig(String mysqlUrl, String username, String password) {
//        return new DataSourceConfig()
//                .setUrl(mysqlUrl)
//                .setDriverName(JDBC_DRIVER_NAME)
//                .setUsername(username)
//                .setPassword(password);
//    }
//
//    private static GlobalConfig getGlobalConfig(String moduleName) {
//        String projectPath = System.getProperty("user.dir");
//        String filePath = projectPath + "/" + moduleName + SRC_MAIN_JAVA;
//        if (PlatformUtil.isWindows()) {
//            filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
//        } else {
//            filePath = filePath.replaceAll("/+|\\\\+", "/");
//        }
//        return new GlobalConfig()
//                .setOutputDir(filePath)
//                .setDateType(DateType.ONLY_DATE)
//                .setIdType(IdType.UUID)
//                .setAuthor(AUTHOR)
//                .setBaseColumnList(true)
//                .setSwagger2(true)
//                .setEnableCache(false)
//                .setBaseResultMap(true)
//                .setOpen(false);
//    }
//    private static GlobalConfig getGlobalConfig1(String moduleName) {
//        String projectPath = System.getProperty("user.dir");
//        String filePath = projectPath + "/" + moduleName + SRC_MAIN_JAVA;
//        if (PlatformUtil.isWindows()) {
//            filePath = filePath.replaceAll("/+|\\\\+", "\\\\");
//        } else {
//            filePath = filePath.replaceAll("/+|\\\\+", "/");
//        }
//        return new GlobalConfig()
//                .setOutputDir(filePath)
//                .setDateType(DateType.ONLY_DATE)
//                .setIdType(IdType.UUID)
//                .setAuthor(AUTHOR)
//                .setBaseColumnList(true)
//                .setSwagger2(false)
//                .setEnableCache(false)
//                .setBaseResultMap(true)
//                .setOpen(false);
//    }
//
//    private static TemplateConfig getTemplateConfig() {
//        return new TemplateConfig()
//                .setController("/templates-generator-myself/controller.java.vm")
//                .setService("/templates-generator-myself/service.java.vm")
//                .setServiceImpl("/templates-generator-myself/serviceImpl.java.vm")
//                .setEntity("/templates-generator-myself/entity.java.vm")
//                .setMapper("/templates-generator-myself/mapper.java.vm")
//                .setXml("/templates-generator-myself/mapper.xml.vm");
//    }
//
//}
